This invention relates, in general, to computing environments that support pageable guests, and in particular, to facilitating processing of frame management operations within such environments.
Improving processing efficiency of computing environments continues to be an important goal. One area in which improvements have been made, but further enhancements are needed, is in the area of supporting pageable guests.
An operating system frequently performs certain main storage (memory) management actions in support of its applications and to ensure security and data integrity. These actions include clearing frames in real memory and setting associated storage protection keys before the frames are assigned to an application or reassigned from one application to another. When this operating system runs as a pageable guest, that is, in a virtual machine whose memory is paged by a hypervisor or host, these guest memory management operations may incur inefficiencies.
For example, if the host has paged out the contents of a guest frame being reassigned, the clearing operation by the guest operating system would result in a host page fault, causing a context switch to the host. The host would then read the guest frame contents from host auxiliary storage, and switch context back to the guest, which would then clear the frame, immediately overlaying the contents which the host just read in.
Similarly, if the guest operating system clears a frame which an application has released and places it into an available pool to be used later, the resultant host page fault and handling will cause that guest frame to be made host resident, consuming host real memory at a time when no productive use will be made of that memory. The operation of setting the storage key on the guest frame commonly occurs at the same time as clearing in these cases, and its handling entails manipulation of the same host interlock and data structures as the clearing operation. Thus, treating frame management operations like clearing and key setting the same as ordinary instructions leads to additional overhead for context switching between guest and host and for executing the host page fault handler; wasted paging I/O bandwidth; less efficient use of host memory; and repeated serialization and access to host translation and control structures.